<!doctype html>



  


<html class="theme-next mist use-motion">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>



<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />












  
  
  <link href="/vendors/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />




  
  
  
  

  
    
    
  

  

  

  

  

  
    
    
    <link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
  






<link href="/vendors/font-awesome/css/font-awesome.min.css?v=4.4.0" rel="stylesheet" type="text/css" />

<link href="/css/main.css?v=5.0.1" rel="stylesheet" type="text/css" />


  <meta name="keywords" content="Java,Language," />








  <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?v=5.0.1" />






<meta name="description" content="说明：Java的使用。">
<meta name="keywords" content="Java,Language">
<meta property="og:type" content="article">
<meta property="og:title" content="Java">
<meta property="og:url" content="http://bebetter.site/2017/01/10/Language/Java-basic/Java/index.html">
<meta property="og:site_name" content="gatewayzy">
<meta property="og:description" content="说明：Java的使用。">
<meta property="og:updated_time" content="2017-01-10T05:58:56.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Java">
<meta name="twitter:description" content="说明：Java的使用。">



<script type="text/javascript" id="hexo.configuration">
  var NexT = window.NexT || {};
  var CONFIG = {
    scheme: 'Mist',
    sidebar: {"position":"right","display":"always"},
    fancybox: true,
    motion: true,
    duoshuo: {
      userId: 0,
      author: '博主'
    }
  };
</script>




  <link rel="canonical" href="http://bebetter.site/2017/01/10/Language/Java-basic/Java/"/>

  <title> Java | gatewayzy </title>
</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">

  










  
  
    
  

  <div class="container one-collumn sidebar-position-right page-post-detail ">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-meta ">
  

  <div class="custom-logo-site-title">
    <a href="/"  class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <span class="site-title">gatewayzy</span>
      <span class="logo-line-after"><i></i></span>
    </a>
  </div>
  <p class="site-subtitle">blog of gatewayzy</p>
</div>

<div class="site-nav-toggle">
  <button>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
  </button>
</div>

<nav class="site-nav">
  

  
    <ul id="menu" class="menu">
      
        
        <li class="menu-item menu-item-home">
          <a href="/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-home"></i> <br />
            
            首页
          </a>
        </li>
      
        
        <li class="menu-item menu-item-categories">
          <a href="/categories" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-th"></i> <br />
            
            分类
          </a>
        </li>
      
        
        <li class="menu-item menu-item-about">
          <a href="/about" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-user"></i> <br />
            
            关于
          </a>
        </li>
      
        
        <li class="menu-item menu-item-archives">
          <a href="/archives" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
            
            归档
          </a>
        </li>
      
        
        <li class="menu-item menu-item-tags">
          <a href="/tags" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-tags"></i> <br />
            
            标签
          </a>
        </li>
      

      
    </ul>
  

  
</nav>

 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    

  
  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                Java
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            <span class="post-meta-item-icon">
              <i class="fa fa-calendar-o"></i>
            </span>
            <span class="post-meta-item-text">发表于</span>
            <time itemprop="dateCreated" datetime="2017-01-10T13:58:10+08:00" content="2017-01-10">
              2017-01-10
            </time>
          </span>

          
            <span class="post-category" >
              &nbsp; | &nbsp;
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              <span class="post-meta-item-text">分类于</span>
              
                <span itemprop="about" itemscope itemtype="https://schema.org/Thing">
                  <a href="/categories/Language/" itemprop="url" rel="index">
                    <span itemprop="name">Language</span>
                  </a>
                </span>

                
                

              
            </span>
          

          
            
          

          

          
          

          
        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        <p><strong>说明：</strong>Java的使用。<br><a id="more"></a></p>
<p>参考文章：</p>
<h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><hr>
<ul>
<li>语言的分类<ul>
<li>其实，现在用编译型、解释型来分类编程语言已经有点力不从心了。</li>
<li>JAVA的第一道工序是javac编译，当然目标文件是bytecode字节码文件。后续可能有三种处理方式：<ul>
<li>运行时，BYTECODE由JVM逐条解释执行，</li>
<li>运行时，部分代码可能由JIT翻译为目标机器指令（以method为翻译单位，还会保存起来，第二次执行就不用翻译了）直接执行；</li>
<li>RTSJ。继JAVAC之后执行AOT二次编译，生成静态的目标平台代码（典型的就是IBM WEBSHPERE REAL TIME）。</li>
</ul>
</li>
<li>有的时候，可能是以上三种方式同时在使用，至少1和2是同时使用的，3需要程序员手工指定。所以讨论语言需要更细化一点了：强类型的、弱类型的，静态的、动态的，GC-based的、手工管理内存的，有没有VM…</li>
</ul>
</li>
<li>目前看来，Java语言特点为：<ul>
<li>强类型（类型在编译期严格确定和检查）</li>
<li>动态的（java语言编译时不需要进行连接工作，所以得到的class文件不能直接在内存中运行。java语言中，类型的加载、连接和初始化操作是在程序运行期间完成的，这种策略虽然会有一定性能开销，但是可以为java应用程序提供高度灵活性。java的动态拓展性就是依赖于运行期动态加载和动态连接实现的。）</li>
<li>GC-based</li>
<li>有jvm。</li>
</ul>
</li>
<li>java语言的特性<ul>
<li>java 从C++改进而来，去掉了多继承、指针等，使用自动垃圾回收等。java前身是Oak。</li>
<li>单继承、封装、多态、抽象 </li>
</ul>
</li>
<li>jvm使用unicode编码。</li>
<li>jsp：include会动态加载内部修改，使用<code>&lt;%include%&gt;</code>不会监听修改，属于静态加载。</li>
<li>i++先返回i当前值，再i变成新值，++i先把i变新值，再返回i当前值，所以是修改后的值。</li>
</ul>
<h2 id="关键字"><a href="#关键字" class="headerlink" title="关键字"></a>关键字</h2><hr>
<h3 id="abstract和interface"><a href="#abstract和interface" class="headerlink" title="abstract和interface"></a>abstract和interface</h3><ul>
<li>abstract 类才能有abstract方法，抽象类的方法可以实现也可以是abstract不实现的。</li>
<li>abstract类不能用new实例化，一般用于存放一些通用的已经实现的方法，提供给具体的类使用：<ul>
<li>abstract 类的abstract方法需要子类重写并实现；</li>
<li>abstract 类的普通方法可以重写，也可以不重写而直接调用。</li>
</ul>
</li>
</ul>
<h3 id="static与final"><a href="#static与final" class="headerlink" title="static与final"></a>static与final</h3><hr>
<ul>
<li>static是静态修饰关键字，可以修饰变量和程序块以及类方法：<ul>
<li>当定义一个static的变量的时，jvm会将其分配在内存堆上，所有程序对它的引用都会指向这一个地址而不会重新分配内存；</li>
<li>当修饰一个程序块的时候(也就是直接将代码写在static{…}中)时候，虚拟机就会优先加载静态块中代码，这主要用于系统初始化，只会执行一次；</li>
<li>当修饰一个类方法时候可以直接通过类来调用而不需要新建对象，Integer.parseInt(i)。</li>
</ul>
</li>
<li>final可以修饰变量、方法及类：<ul>
<li>当定义一个final变量时，jvm会将其分配到常量池中，程序不可改变其值；</li>
<li>当定义一个方法时，改方法在子类中将不能被重写；</li>
<li>当修饰一个类时，该类不能被继承。</li>
</ul>
</li>
</ul>
<h2 id="代码块与方法"><a href="#代码块与方法" class="headerlink" title="代码块与方法"></a>代码块与方法</h2><hr>
<h3 id="子类与父类的静态代码块的加载"><a href="#子类与父类的静态代码块的加载" class="headerlink" title="子类与父类的静态代码块的加载"></a>子类与父类的静态代码块的加载</h3><hr>
<ul>
<li>父类的静态代码块 static{} // 类加载阶段的初始化要先运行父类的<code>&lt;clinit&gt;</code>类构造器，而<code>&lt;clinit&gt;</code>合并了类变量赋值和static代码块。</li>
<li>子类的静态代码块 static{}</li>
<li>父类的非静态代码块 {}  </li>
<li>子类的非静态代码块 {}  (子类的clinit执行之前需要先执行父类的clinit方法)</li>
<li>父类的构造器 constructor</li>
<li>子类的构造器 constructor (初始化一个子类必须先初始化一个父类)</li>
</ul>
<h2 id="方法与接口"><a href="#方法与接口" class="headerlink" title="方法与接口"></a>方法与接口</h2><hr>
<h3 id="String-StringBuffer-StringBuilder"><a href="#String-StringBuffer-StringBuilder" class="headerlink" title="String StringBuffer StringBuilder"></a>String StringBuffer StringBuilder</h3><ul>
<li>String是final常量，各种split、+、substring等方法都是新建一个String而不是修改原有String。注意s=”a”+”b”这种会在编译期直接转为s=”ab”，但是s=s1+”a”，还是会转成sb（jdk1.5以前用线程安全的StringBuffer，jdk1.5开始变成非线程安全的StringBuilder）并append；</li>
<li>StringBuffer可变，sb.append(“123”)，而且StringBuffer是线程安全的，自动使用sb的对象锁进行同步。</li>
<li>StringBuilder可变，sb.append(“123”)，但是StringBuilder非线程安全，速度更快。</li>
<li>String（先转成sb再操作）慢于StringBuffer（线程安全，加锁耗时），StringBuffer慢于StringBuilder（非线程安全）。</li>
</ul>
<h3 id="Throwable接口的类继承体系"><a href="#Throwable接口的类继承体系" class="headerlink" title="Throwable接口的类继承体系"></a>Throwable接口的类继承体系</h3><h3 id="Map与Collection接口"><a href="#Map与Collection接口" class="headerlink" title="Map与Collection接口"></a>Map与Collection接口</h3><ul>
<li>继承extends Collection接口的有List接口、Set接口。List的实现类有ArrayList、LinkedList等，Set接口实现类有TreeSet、HashSet等<ul>
<li>Collections类(注意有s)里面提供了Collection接口子类的很多static方法。</li>
<li>对于List、Set等接口的实现类，分别继承提供AbstractList，AbstractSet等类提供方法集合（已经实现的和未实现的abstract方法），具体类就拥有了这些方法（已实现的可以重写，未实现的抽象方法必须实现）</li>
</ul>
</li>
<li>Extends Map 接口的有，implements Map接口的有HashMap、ConcurrentHashMap、TreeMap等。</li>
</ul>
<h3 id="Arrays类-Collections类"><a href="#Arrays类-Collections类" class="headerlink" title="Arrays类 Collections类"></a>Arrays类 Collections类</h3><ul>
<li>类里面提供很多static方法，为数组array、collection（list、set）等具体类提供通用方法。</li>
</ul>
<h2 id="源码与数据结构"><a href="#源码与数据结构" class="headerlink" title="源码与数据结构"></a>源码与数据结构</h2><hr>
<h3 id="HashSet-LinkedHashSet-TreeSet"><a href="#HashSet-LinkedHashSet-TreeSet" class="headerlink" title="HashSet LinkedHashSet TreeSet"></a>HashSet LinkedHashSet TreeSet</h3><h3 id="ArrayList-LinkedList"><a href="#ArrayList-LinkedList" class="headerlink" title="ArrayList LinkedList"></a>ArrayList LinkedList</h3><h3 id="HashMap、Hashtable、ConcurrentHashMap、SynchronizedMap"><a href="#HashMap、Hashtable、ConcurrentHashMap、SynchronizedMap" class="headerlink" title="HashMap、Hashtable、ConcurrentHashMap、SynchronizedMap"></a>HashMap、Hashtable、ConcurrentHashMap、SynchronizedMap</h3><ul>
<li>参考文章 <a href="http://wiki.jikexueyuan.com/project/java-collection/concurrenthashmap.html" target="_blank" rel="external">极客学院</a></li>
<li>HashMap<ul>
<li>继承Map接口，线程不安全。HashMap可以接受为null的键值(key)和值(value)，而Hashtable则不行。</li>
<li>存储结构：HashMap内部存储使用了一个Node数组(默认大小是16)，而Node类包含一个类型为Node的next的变量，每个Node就相当于一个链表。Node结构（key，value，hash（key的hashCode），Node next）。</li>
<li>自动翻倍扩容：HashMap提供了自动扩容机制，当元素个数达到数组大小loadFactor后会扩大数组的大小，在默认情况下，数组大小为16，loadFactor为0.75，也就是说当HashMap中的元素超过16\0.75=12时，会把数组大小扩展为2*16=32。扩容是因为如果hash bucket太大会降低效率。</li>
<li>整体上，HashMap就是一个数组(16个hash桶)，每个桶用链表存放着对象。put时根据key的hash值放到对应的桶里，如果桶里有key 存在就覆盖；get查找的时候，根据key的hash值找到桶，如果桶里有多个值，就根据key进行equals比较，获取value。</li>
<li>实现安全的HashMap有三种方式：<ul>
<li>Hashtable：  Map<string, string=""> hashtable = new Hashtable&lt;&gt;();</string,></li>
<li>ConcurrentHashMap： Map<string, string=""> concurrentHashMap = new ConcurrentHashMap&lt;&gt;();</string,></li>
<li>SynchronizedMap： Map<string, string=""> synchronizedHashMap = Collections.synchronizedMap (new HashMap<string, string="">());</string,></string,></li>
</ul>
</li>
</ul>
</li>
<li>Hashtable (注意t小写)<ul>
<li>Hashtable的所有方法都是synchronized，所以Hashtable是线程安全的，多个线程可以共享一个Hashtable。Hashtable效率低，没并发需求不需要，有并发需求优先使用ConcurrentHashMap。</li>
<li>Hashtable源码： <code>public synchronized V get(Object key) {...}</code></li>
<li>所以当一个线程访问HashTable时，其他线程如果也要访问，会被阻塞住。举个例子，当一个线程使用put时，另一个线程不但不可以使用put方法，连get方法都不可以，效率很低，现在基本不会使用它了。</li>
</ul>
</li>
<li>ConcurrentHashMap （简写CHM）<ul>
<li>synchronized(map){  if (map.get(key) == null){return map.put(key, value);} else{return map.get(key);} }</li>
<li>上面这段代码在HashMap和HashTable中是好用的，但在CHM中是有出错的风险的。这是因为CHM在put操作时并没有对整个Map加锁，所以一个线程正在put(k,v)的时候，另一个线程调用get(k)会得到null，这就会造成一个线程put的值会被另一个线程put的值所覆盖。当然，你可以将代码封装到synchronized代码块中，这样虽然线程安全了，但会使你的代码变成了单线程。CHM提供的putIfAbsent(key,value)方法原子性的实现了同样的功能，同时避免了上面的线程竞争的风险。</li>
<li>加锁操作是针对的 hash 值对应的某个 Segment（个人理解一个segment类似于一个HashMap，ConcurrentHashMap默认是16个segment），而不是整个 ConcurrentHashMap。因为 put 操作只是在这个 Segment 中完成，所以并不需要对整个 ConcurrentHashMap 加锁。所以，此时，其他的线程也可以对另外的 Segment 进行 put 操作，因为虽然该 Segment 被锁住了，但其他的 Segment 并没有加锁。同时，读线程并不会因为本线程的加锁而阻塞。正是因为其内部的结构以及机制，所以 ConcurrentHashMap 在并发访问的性能上要比Hashtable和同步包装之后的HashMap的性能提高很多。在理想状态下，ConcurrentHashMap 可以支持 16 个线程执行并发写操作（如果并发级别设置为 16），及任意数量线程的读操作。</li>
<li>CHM适用于大量读。当写量大于等于读时，CHM的性能是低于Hashtable和synchronized Map的。这是因为当锁住了整个Map时，读操作要等待对同一部分执行写操作的线程结束。CHM适用于做cache,在程序启动时初始化，之后可以被多个请求线程访问。正如Javadoc说明的那样，CHM是HashTable一个很好的替代，但要记住，CHM的比HashTable的同步性稍弱。</li>
</ul>
</li>
<li>SynchronizedMap<ul>
<li>jdk8中源码如下，map= Collections.synchronizedMap(new HashMap<string, string="">())返回一个将map封装之后的同步类，该类内部使用synchronized (mutex)方法保证线程安全。（使用synchronized对一个final对象的对象级锁进行互斥实现线程安全）</string,></li>
<li>Collections提供了很多这种同步类封装方法，如Collections.synchronizedCollention(Collection c)、 Collections.synchronizedSortedMap(SortedMap sm)、 synchronizedSortedSet(SortedSet ss)等等。</li>
</ul>
</li>
</ul>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div></pre></td><td class="code"><pre><div class="line">Map&lt;String, String&gt; synchronizedHashMap = Collections.synchronizedMap (new HashMap&lt;String, String&gt;());</div><div class="line"></div><div class="line">// jdk8中 Collections.synchronizedMap 源码如下</div><div class="line">public static &lt;K,V&gt; Map&lt;K,V&gt; synchronizedMap(Map&lt;K,V&gt; m) &#123; return new SynchronizedMap&lt;&gt;(m);&#125;</div><div class="line"></div><div class="line">private static class SynchronizedMap&lt;K,V&gt; implements Map&lt;K,V&gt;, Serializable &#123;</div><div class="line">       private static final long serialVersionUID = 1978198479659022715L;</div><div class="line"> </div><div class="line">       private final Map&lt;K,V&gt; m;     // Backing Map</div><div class="line">       final Object      mutex;        // Object on which to synchronize</div><div class="line"> </div><div class="line">       SynchronizedMap(Map&lt;K,V&gt; m) &#123;</div><div class="line">           this.m = Objects.requireNonNull(m);</div><div class="line">           mutex = this;</div><div class="line">       &#125;</div><div class="line">       SynchronizedMap(Map&lt;K,V&gt; m, Object mutex) &#123;</div><div class="line">           this.m = m;</div><div class="line">           this.mutex = mutex;</div><div class="line">       &#125;</div><div class="line">       public int size() &#123;</div><div class="line">           synchronized (mutex) &#123;return m.size();&#125;</div><div class="line">       &#125;</div></pre></td></tr></table></figure>

      
    </div>

    <div>
      
        

      
    </div>

    <div>
      
        

      
    </div>

    <footer class="post-footer">
      
        <div class="post-tags">
          
            <a href="/tags/Java/" rel="tag">#Java</a>
          
            <a href="/tags/Language/" rel="tag">#Language</a>
          
        </div>
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/2016/08/08/Blog/搭建个人博客站点2-托管到公网服务器/" rel="next" title="搭建个人博客站点(2)-托管到公网服务器">
                <i class="fa fa-chevron-left"></i> 搭建个人博客站点(2)-托管到公网服务器
              </a>
            
          </div>

          <div class="post-nav-prev post-nav-item">
            
              <a href="/2017/01/10/Language/Python Django/" rel="prev" title="Python Django">
                Python Django <i class="fa fa-chevron-right"></i>
              </a>
            
          </div>
        </div>
      

      
      
    </footer>
  </article>



    <div class="post-spread">
      
    </div>
  </div>


          </div>
          


          
  <div class="comments" id="comments">
    


  </div>


        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      

      
        <ul class="sidebar-nav motion-element">
          <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap" >
            文章目录
          </li>
          <li class="sidebar-nav-overview" data-target="site-overview">
            站点概览
          </li>
        </ul>
      

      <section class="site-overview sidebar-panel ">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
          <img class="site-author-image" itemprop="image"
               src="/statics/images/avatar.png"
               alt="gatewayzy" />
          <p class="site-author-name" itemprop="name">gatewayzy</p>
          <p class="site-description motion-element" itemprop="description">blog website with hexo and github pages</p>
        </div>
        <nav class="site-state motion-element">
          <div class="site-state-item site-state-posts">
            <a href="/archives">
              <span class="site-state-item-count">70</span>
              <span class="site-state-item-name">日志</span>
            </a>
          </div>

          
            <div class="site-state-item site-state-categories">
              <a href="/categories">
                <span class="site-state-item-count">10</span>
                <span class="site-state-item-name">分类</span>
              </a>
            </div>
          

          
            <div class="site-state-item site-state-tags">
              <a href="/tags">
                <span class="site-state-item-count">38</span>
                <span class="site-state-item-name">标签</span>
              </a>
            </div>
          

        </nav>

        

        <div class="links-of-author motion-element">
          
        </div>

        
        

        
        
          <div class="links-of-blogroll motion-element links-of-blogroll-inline">
            <div class="links-of-blogroll-title">
              <i class="fa  fa-fw fa-globe"></i>
              友情链接
            </div>
            <ul class="links-of-blogroll-list">
              
                <li class="links-of-blogroll-item">
                  <a href="https://github.com/gatewayzy" title="Github-gatewayzy" target="_blank">Github-gatewayzy</a>
                </li>
              
                <li class="links-of-blogroll-item">
                  <a href="http://google.com/" title="Goolge" target="_blank">Goolge</a>
                </li>
              
                <li class="links-of-blogroll-item">
                  <a href="http://wiki.jikexueyuan.com/" title="Wiki-jike" target="_blank">Wiki-jike</a>
                </li>
              
            </ul>
          </div>
        

      </section>

      
        <section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
          <div class="post-toc">
            
              
            
            
              <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#简介"><span class="nav-number">1.</span> <span class="nav-text">简介</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#关键字"><span class="nav-number">2.</span> <span class="nav-text">关键字</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#abstract和interface"><span class="nav-number">2.1.</span> <span class="nav-text">abstract和interface</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#static与final"><span class="nav-number">2.2.</span> <span class="nav-text">static与final</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#代码块与方法"><span class="nav-number">3.</span> <span class="nav-text">代码块与方法</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#子类与父类的静态代码块的加载"><span class="nav-number">3.1.</span> <span class="nav-text">子类与父类的静态代码块的加载</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#方法与接口"><span class="nav-number">4.</span> <span class="nav-text">方法与接口</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#String-StringBuffer-StringBuilder"><span class="nav-number">4.1.</span> <span class="nav-text">String StringBuffer StringBuilder</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Throwable接口的类继承体系"><span class="nav-number">4.2.</span> <span class="nav-text">Throwable接口的类继承体系</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Map与Collection接口"><span class="nav-number">4.3.</span> <span class="nav-text">Map与Collection接口</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Arrays类-Collections类"><span class="nav-number">4.4.</span> <span class="nav-text">Arrays类 Collections类</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#源码与数据结构"><span class="nav-number">5.</span> <span class="nav-text">源码与数据结构</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#HashSet-LinkedHashSet-TreeSet"><span class="nav-number">5.1.</span> <span class="nav-text">HashSet LinkedHashSet TreeSet</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#ArrayList-LinkedList"><span class="nav-number">5.2.</span> <span class="nav-text">ArrayList LinkedList</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#HashMap、Hashtable、ConcurrentHashMap、SynchronizedMap"><span class="nav-number">5.3.</span> <span class="nav-text">HashMap、Hashtable、ConcurrentHashMap、SynchronizedMap</span></a></li></ol></li></ol></div>
            
          </div>
        </section>
      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright" >
  
  &copy; 
  <span itemprop="copyrightYear">2018</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">gatewayzy</span>
</div>

<div class="powered-by">
  由 <a class="theme-link" href="https://hexo.io">Hexo</a> 强力驱动
</div>

<div class="theme-info">
  主题 -
  <a class="theme-link" href="https://github.com/iissnan/hexo-theme-next">
    NexT.Mist
  </a>
</div>

        

        
      </div>
    </footer>

    <div class="back-to-top">
      <i class="fa fa-arrow-up"></i>
    </div>
  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>









  



  
  <script type="text/javascript" src="/vendors/jquery/index.js?v=2.1.3"></script>

  
  <script type="text/javascript" src="/vendors/fastclick/lib/fastclick.min.js?v=1.0.6"></script>

  
  <script type="text/javascript" src="/vendors/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>

  
  <script type="text/javascript" src="/vendors/velocity/velocity.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/vendors/velocity/velocity.ui.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/vendors/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>


  


  <script type="text/javascript" src="/js/src/utils.js?v=5.0.1"></script>

  <script type="text/javascript" src="/js/src/motion.js?v=5.0.1"></script>



  
  

  
  <script type="text/javascript" src="/js/src/scrollspy.js?v=5.0.1"></script>
<script type="text/javascript" src="/js/src/post-details.js?v=5.0.1"></script>



  


  <script type="text/javascript" src="/js/src/bootstrap.js?v=5.0.1"></script>



  



  




  
  

  
  <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
      tex2jax: {
        inlineMath: [ ['$','$'], ["\\(","\\)"]  ],
        processEscapes: true,
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
      }
    });
  </script>

  <script type="text/x-mathjax-config">
    MathJax.Hub.Queue(function() {
      var all = MathJax.Hub.getAllJax(), i;
      for (i=0; i < all.length; i += 1) {
        all[i].SourceElement().parentNode.className += ' has-jax';
      }
    });
  </script>
  <script type="text/javascript" src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>



  

  
<script type="text/javascript" async src="//push.zhanzhang.baidu.com/push.js">
</script>


</body>
</html>
